#!/usr/bin/bash
set -e
localIp=$(hostname -i | awk '{print $1}')
projectName=${1:?需要提供项目名称}
mappingPort=${2:-8080}
replicas=${3:-1}
appDir=$(dirname $0)
declare -i version=0
versionFile="version.txt"
if [[ -e "${versionFile}" ]]
then
        version=$(cat "${versionFile}");
fi;

version=$[version + 1]
echo ${version} > "${versionFile}"
echo "主机IP:${localIp}, 项目名称：${projectName}, 映射端口：${mappingPort}, 集群数量：${replicas}, 写入版本：${version}"

cd ${appDir}
echo "打包项目,当前位置：$PWD"
git pull
mvn clean package -Dmaven.test.skip=true

echo 当前更新版本:${version:?必须提供应用的更新版本}
echo "构建新的镜像..."
docker build -t ${projectName}:${version} .

echo "更新服务..."
if docker service ps  ${projectName}
then
        echo "服务存在，直接更新...";
        docker service update --image ${projectName}:${version} ${projectName}
else
        echo "服务不存在，创建新服务..."
        docker service create --name ${projectName} --replicas ${replicas} --limit-memory 1024M --host host.docker.internal:${localIp} -p ${mappingPort}:8080  ${projectName}:${version}
fi;

#移除太旧的版本
echo 移除旧版本..
docker rmi ${projectName}:$[version-3];

echo "更新完成！！！"